package org.zoomdy.gdbserver.extender;

public abstract class Node implements INode
{
    public boolean setProperty(String name, String value)
    {
        // 默认没有属性，返回false
        return false;
    }
    
    public String getProperty(String name)
    {
        // 默认没有属性，返回null
        return null;
    }
    
    public boolean inputCommand(Packet pkt)
    {
        // 默认实现，将输入命令传递给下游节点
        return this.outputCommand(pkt);
    }
    
    public boolean inputResponse(Packet pkt)
    {
        // 默认实现，将输入响应传递给上游节点
        return this.outputResponse(pkt);
    }
    
    public boolean start()
    {
        // 默认实现仅返回true
        return true;
    }
    
    public void stop()
    {
        // 默认实现，什么都不做
    }
    
    public boolean outputCommand(Packet pkt)
    {
        if(next != null)
        {
            // 如果下游节点不为null，那么传递给下游节点
            return next.inputCommand(pkt);
        }
        else
        {
            return false;
        }
    }
    
    public boolean outputResponse(Packet pkt)
    {
        if(prev != null)
        {
            // 如果上游节点不为null，那么传递给上游节点
            return prev.inputResponse(pkt);
        }
        else
        {
            return false;
        }
    }
    
    public boolean connect()
    {
        if(next != null)
        {
            return next.connect();
        }
        
        return true;
    }
    
    public void setNext(INode node)
    {
        next = (Node)node;
    }
    
    public void setPrev(INode node)
    {
        prev = (Node)node;
    }
    
    public INode getNext()
    {
        return next;
    }
    
    public INode getPrev()
    {
        return prev;
    }
    
    private Node next;
    private Node prev;
}
